<?php
require_once 'AdminController.php';
/**
 * 
 * Classe referente aos usuários do admin do site
 * @author Ramon Moraes
 *
 */
class Administradores extends AdminController{
	
	/**
	 * 
	 * Construtor da classe
	 * @access public
	 * @method __construct
	 */
	public function __construct(){
		
		parent::__construct();
	}
	
	public function index(){
		
		parent::index(strtolower($this->router->fetch_class()));
	}
	
	/**
	 * 
	 * Função para fazer o login do usuário do admin
	 * @access public
	 * @method login
	 */
	public function login(){
		
		if($this->isLogged()){
			redirect('admin/administradores');
		}
		
		if(isset($_POST['email']) && isset($_POST['senha'])){
			if($_POST['email'] == '' || $_POST['senha'] == ''){
				redirect('admin/administradores/login?erro=1');
			}else{
				$email = $_POST['email'];
				$senha = md5($_POST['senha']);
				
				$adm = new Administrador();
				$adm->where('email', $email)->limit(1)->get();
				
				if($adm->senha == $senha){
					$this->sessao->set_userdata('usuario', $adm);
					$this->sessao->set_userdata('logado', true);
					redirect('admin/administradores');
				}else{
					redirect('admin/administradores/login?erro=1');
				}
			}
		}else{
			$this->loadView('admin/administradores/login');
		}
	}
	
	/**
	 * 
	 * Função para fazer o logout do usuário do admin
	 * @access public
	 * @method logout
	 */
	public function logout($msg=false){
		$this->sessao->unset_userdata('usuario');
		$this->sessao->unset_userdata('logado');
		if($msg){
			$this->sessao->set_userdata('msg', true);
		}
		redirect('admin/administradores');
	}
	
	/**
	 * 
	 * Função para trazer o usuário logado na sessão
	 * @access public
	 * @method getLoggado
	 */
	public function getLoggado(){
		return $this->sessao->userdata('usuario');
	}
	
	/**
	 * 
	 * Função para carregar página de cadastrar usuários
	 * @access public
	 * @method cadastro
	 */
	public function cadastro($pag=1, $limit=10){
		
		if(!$this->isLogged()){
			redirect('admin/administradores/login');
		}
		
		$indices = array(
			'Id',
			'Nome',
			'Data Cadastro',
			'Email'
		);
		
		$adm = new Administrador();
		$adm->order_by('id', 'desc')->get($limit, ($pag - 1) * $limit);
		foreach($adm->all as $a){
			$dados[] = $a->getArrayDadosAdmin();
		}
		
		$a2 = new Administrador();
		$total = $a2->where('flag', 'ATIVO')->count();
		$numPaginas = ceil($total / $limit);
		if($numPaginas == 0){
			$numPaginas = 1;
		}
		
		$paginacao = array(
			'paginaAtual' 		=> $pag,
			'itensPorPagina'	=> $limit,
			'totalPaginas'		=> $numPaginas,
			'link'				=> 'admin/' . $this->router->fetch_class() . '/' . $this->router->fetch_method() . '/'
		);
		
		$this->setData('colunas', $indices);
		$this->setData('linhas', $dados);
		$this->setData('paginacao', $paginacao);
		if($this->sessao->userdata('cadastroSucesso', true)){
			$this->setData('cadastroSucesso', $this->sessao->userdata('cadastroSucesso', true));
			$this->sessao->unset_userdata('cadastroSucesso');
		}
		if($this->sessao->userdata('msgErro')){
			$this->setData('msgErro', $this->sessao->userdata('msgErro'));
			$this->sessao->unset_userdata('msgErro');
		}
		
		
		$this->loadView('admin/administradores/index');
	}
	
	/**
	 * 
	 * Função para exluir um usuário
	 * @param int $id
	 * @access public
	 * @method excluir
	 */
	public function excluir($id){
		$adm = new Administrador();
		$adm->where('id', $id)->get();
		$adm->delete();
		redirect('admin/administradores');
	}
	
	public function salvar($id=null){
		
		if(isset($_POST['nome']) && $_POST['nome'] != '' && isset($_POST['email']) && $_POST['email'] != '' && isset($_POST['grupo']) && $_POST['grupo'] != ''){
			$adm = new Administrador();
			
			if($adm->getByEmail($_POST['email'])){
				redirect('admin/administradores/cadastroErro/1');
			}
			
			if(($id == null && $_POST['senha'] == '') || ($_POST['senha'] != $_POST['confsenha'])){
				redirect('admin/administradores/cadastroErro');
			}
			
			if($id != null){
				$adm->where('id', $id)->get();
			}

			$adm->nome = $_POST['nome'];
			$adm->email = $_POST['email'];
			
			if($_POST['senha'] != '')
				$adm->senha = md5($_POST['senha']);
			
			$g = new Grupo();
			$g->where('id', $_POST['grupo'])->get();
			
			$adm->grupo->get();
			if($adm->grupo->id != ''){
				$rel = new Grupo();
				$rel->where('id', $adm->grupo->id)->get();
				$adm->delete($rel);
			}
			
			$adm->save($g);
			redirect('admin/administradores/cadastroSucesso');
		}
		redirect('admin/administradores/cadastroErro');
	}
	
	public function cadastroSucesso(){
		
		$this->sessao->set_userdata('cadastroSucesso', true);
		$this->index();
	}
	
	public function cadastroErro($erro=null){
		
		$this->sessao->set_userdata('cadastroSucesso', false);
		$this->sessao->set_userdata('msgErro', ($erro != null ? 'Já existe um usuário com esse email' : ''));
		$this->index();
	}
	
	public function alterarSenha($erro=false){
		
		if(isset($_POST['senhaantiga']) && $_POST['senhaantiga'] != '' && $_POST['novasenha'] != '' && $_POST['confsenha'] != ''){
			if($_POST['novasenha'] != $_POST['confsenha']){
				redirect('admin/administradores/alterarSenha/1');
			}
			$adm = new Administrador();
			$adm->where('id', $this->getLoggado()->id)->get();
			
			if(md5($_POST['senhaantiga']) != $adm->senha){
				redirect('admin/administradores/alterarSenha/1');
			}
			
			$adm->senha = md5($_POST['novasenha']);
			
			$adm->save();
			redirect('admin/administradores/logout/1');
		}
		
		if(!$this->isLogged()){
			redirect('admin/administradores/login');
		}
		
		if($erro || (isset($_POST['senhaantiga']) && $_POST['senhaantiga'] == '') || (isset($_POST['novasenha']) && $_POST['novasenha'] == '') || (isset($_POST['confsenha']) && $_POST['confsenha'] == '')){
			$this->setData('erro', true);
		}
		$this->loadView('admin/administradores/senha');
	}
}